package com.zrc.japktool.ui.view;

import javafx.geometry.Insets;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;

// 关键：去掉 extends Application，改为普通类，专注于创建富文本编辑器UI
public class Test1 {
    private TextArea textArea;
    private ComboBox<String> fontComboBox;
    private ComboBox<Integer> sizeComboBox;
    private ComboBox<String> colorComboBox;
    private ToggleButton boldButton;
    private ToggleButton italicButton;
    private ToggleButton underlineButton;

    // 用于保存当前文本样式的CSS
    private String currentStyle = "";

    /**
     * 对外提供方法：创建并返回富文本编辑器的完整UI布局
     */
    public BorderPane createRichEditorUI() {
        // 1. 创建主布局（与原start方法逻辑一致）
        BorderPane root = new BorderPane();

        // 2. 创建工具栏（复用原createToolbar方法）
        HBox toolbar = createToolbar();
        root.setTop(toolbar);

        // 3. 创建文本区域（初始化逻辑不变）
        textArea = new TextArea();
        textArea.setWrapText(true);
        textArea.setPadding(new Insets(10));
        root.setCenter(textArea);

        return root; // 返回完整布局，供MainApplication加载
    }

    // 原createToolbar方法完全保留（逻辑不变，仅改为私有成员方法）
    private HBox createToolbar() {
        HBox toolbar = new HBox(10);
        toolbar.setPadding(new Insets(10));
        toolbar.setStyle("-fx-background-color: #f0f0f0;");

        // 字体选择
        Label fontLabel = new Label("字体:");
        fontComboBox = new ComboBox<>();
        fontComboBox.getItems().addAll("Arial", "Times New Roman", "Courier New", "Verdana", "Georgia", "SimSun", "Microsoft YaHei");
        fontComboBox.setValue("Arial");
        fontComboBox.setOnAction(e -> updateFont());

        // 大小选择
        Label sizeLabel = new Label("大小:");
        sizeComboBox = new ComboBox<>();
        for (int i = 8; i <= 36; i += 2) {
            sizeComboBox.getItems().add(i);
        }
        sizeComboBox.setValue(12);
        sizeComboBox.setOnAction(e -> updateFontSize());

        // 颜色选择
        Label colorLabel = new Label("颜色:");
        colorComboBox = new ComboBox<>();
        colorComboBox.getItems().addAll("黑色", "红色", "蓝色", "绿色", "橙色", "紫色");
        colorComboBox.setValue("黑色");
        colorComboBox.setOnAction(e -> updateFontColor());

        // 粗体按钮
        boldButton = new ToggleButton("粗体");
        boldButton.setOnAction(e -> toggleBold());

        // 斜体按钮
        italicButton = new ToggleButton("斜体");
        italicButton.setOnAction(e -> toggleItalic());

        // 下划线按钮
        underlineButton = new ToggleButton("下划线");
        underlineButton.setOnAction(e -> toggleUnderline());

        // 添加所有组件到工具栏
        toolbar.getChildren().addAll(
                fontLabel, fontComboBox,
                sizeLabel, sizeComboBox,
                colorLabel, colorComboBox,
                boldButton, italicButton, underlineButton
        );

        return toolbar;
    }

    // 以下所有样式控制方法（updateFont、toggleBold等）完全保留，逻辑不变
    private void updateFont() {
        String fontName = fontComboBox.getValue();
        textArea.setFont(new Font(fontName, textArea.getFont().getSize()));
    }

    private void updateFontSize() {
        int fontSize = sizeComboBox.getValue();
        textArea.setFont(new Font(textArea.getFont().getName(), fontSize));
    }

    private void updateFontColor() {
        String colorName = colorComboBox.getValue();
        String colorCode;

        switch (colorName) {
            case "红色":
                colorCode = "#ff0000";
                break;
            case "蓝色":
                colorCode = "#0000ff";
                break;
            case "绿色":
                colorCode = "#008000";
                break;
            case "橙色":
                colorCode = "#ffa500";
                break;
            case "紫色":
                colorCode = "#800080";
                break;
            default: // 黑色
                colorCode = "#000000";
        }

        // 更新颜色样式并保留其他样式
        updateStyle("-fx-text-fill", colorCode);
    }

    private void toggleBold() {
        Font currentFont = textArea.getFont();
        String fontName = currentFont.getName();
        double fontSize = currentFont.getSize();

        if (boldButton.isSelected()) {
            textArea.setFont(Font.font(fontName, FontWeight.BOLD, fontSize));
        } else {
            textArea.setFont(Font.font(fontName, FontWeight.NORMAL, fontSize));
        }
    }

    private void toggleItalic() {
        Font currentFont = textArea.getFont();
        String fontName = currentFont.getName();
        double fontSize = currentFont.getSize();

        if (italicButton.isSelected()) {
            textArea.setFont(Font.font(fontName, FontPosture.ITALIC, fontSize));
        } else {
            textArea.setFont(Font.font(fontName, FontPosture.REGULAR, fontSize));
        }
    }

    private void toggleUnderline() {
        // 使用CSS设置下划线
        if (underlineButton.isSelected()) {
            updateStyle("-fx-underline", "true");
        } else {
            updateStyle("-fx-underline", "false");
        }
    }

    // 更新样式的辅助方法，保留已有样式
    private void updateStyle(String property, String value) {
        // 移除旧的属性值
        if (currentStyle.contains(property)) {
            currentStyle = currentStyle.replaceAll(property + ": [^;]+;", "");
        }
        // 添加新的属性值
        currentStyle += property + ": " + value + ";";
        // 应用样式
        textArea.setStyle(currentStyle);
    }
}